# from pylab import *
from matplotlib import pyplot as plt
from django.utils.translation import ugettext as _


class MatplotWrapper():
  """
  Clase para facilitar creacion de graficos con Matplotlib
  
  Explicacion larga
  """
  def __init__(self, xx, yy,  filepath = '/tmp/', webpath = 'http://127.0.0.1:8000/tmp/'):
    """
    Inicializador de la clase
    
    Funcion que genera ...
    
    Parameters
    -----------------
    xx : array of float integer
      Abscisas
    yy : array of float integer
      Ordenadas      
    """  
    import matplotlib as mpl
    mpl.rcParams['font.family'] = 'Arial'
    mpl.rcParams['font.size'] = 8
    self.xx = xx
    self.yy = yy
    self.filepath = filepath
    self.webpath = webpath    
    self.foot = "IngeSur srl"
    
  def getRandomString(self, longitud=9): 
    """
    Genera string aleatorio de longitud deseada
    
    Funcion que genera ...
    
    Parameters
    -----------------
    N : integer
      Longitud de la cadena
    """
    import random
    string = ''
    for i in range(longitud):
      string += random.choice('abcdefghijklmnopqrstuvwxyz0123456789_-ABCDEFGHIJKMLNOPQRSTUVWXYZ')
    return ( string )
    
  def createImageAll(self, dpi=300):
    """
    Genera archivo con PNG con 4 graficos con los datos
    
    Funcion que genera ...
    
    Parameters
    -----------------
    dpi : integer
      Resolucion deseada de la imagen
    """
    lx = "t(d)"
    ly = "s(m)"
    self.g = plt
    self.g.subplots_adjust(left=0.03, bottom=0.035, right=0.98, top=0.99, wspace = 0.10, hspace = 0.10)
    self.g.subplot(224)    
    self.g.plot(self.xx, self.yy, '-b', self.xx, self.yy, '.r')
    self.g.grid( True )
    self.g.subplot(223)    
    self.g.semilogy(self.xx, self.yy, '-b', self.xx, self.yy, '.r')
    self.g.grid( True )
    self.g.subplot(222)
    self.g.semilogx(self.xx, self.yy, '-b', self.xx, self.yy, '.r')    
    self.g.grid( True )
    self.g.subplot(221)
    self.g.loglog(self.xx, self.yy, '-b', self.xx, self.yy, '.r')
    self.g.grid( True )
    self.g.figtext(0.985, 0.90, self.foot, fontname = "Arial",  rotation = "vertical", fontsize = 8, weight = "normal",  color="g")
    # TODO: Terminacion
    self.filename = self.getRandomString() + '.png'
    self.g.savefig( self.filepath + self.filename )
    self.g.clf()
    # del( self.g )
    return ( [self.webpath + self.filename, self.filepath + self.filename] )

  def createImageAd(self, xcalc, ycalc, dpi=300,):
    """
    Genera archivo con PNG con 4 graficos con los datos
    
    Funcion que genera ...
    
    Parameters
    -----------------
    dpi : integer
      Resolucion deseada de la imagen
    """
    lx = _(r"tiempo (d)")
    ly = _(r"descensos (m)")
    self.g = plt
    self.g.subplots_adjust(left=0.065, bottom=0.075, right=0.98, top=0.95, wspace = 0.10, hspace = 0.10)
    self.g.subplot(111)    
    self.g.loglog(self.xx, self.yy, '.r', xcalc, ycalc, '-b')
    self.g.xlabel(lx)
    self.g.ylabel(ly)
    self.g.title(_(r"Datos ajustados"))
    self.g.figtext(0.985, 0.90, self.foot, fontname = "Arial",  rotation = "vertical", fontsize = 8, weight = "normal",  color="g")
    self.g.grid(True)
    # TODO: Terminacion
    self.filename = self.getRandomString() + '.png'
    self.g.savefig( self.filepath + self.filename )
    self.g.clf()
    # del( self.g )
    return ( [self.webpath + self.filename, self.filepath + self.filename] )
